/**************************************************************************************************
**                                                                                               **
**  文件名称:  dal_ver_man.c                                                                     **
**  版权所有:  CopyRight @ Xiamen Yaxon NetWork CO.LTD. 2017                                     **
**  文件描述:  程序版本管控                                                                      **
**  ===========================================================================================  **
**  创建信息:  | 2017-4-18 | LEON | 创建本模块                                                   **
**  ===========================================================================================  **
**  修改信息:  单击此处添加....                                                                  **
**************************************************************************************************/
#include "dal_include.h"
#include "dal_ver_man.h"

/*************************************************************************************************/
/*                           辅助宏转换                                                          */
/*************************************************************************************************/
#define REPLACE(s)           #s
#define NUM2STR(s)           REPLACE(s)
#define LINKSTR(a, b)        a b

/*************************************************************************************************/
/*                           系统版本号定义                                                      */
/*************************************************************************************************/
#define SOFTWARE_VERSION     "V0.7"
#define HARDWARE_VERSION     "STM32F429-KIT"

#ifdef USB_DEV
#define USB_VERSION          " with USB_DEV"
#endif

#ifdef USB_HOST
#define USB_VERSION          " with USB_HOST"
#endif

/*************************************************************************************************/
/*                           模块静态变量定义                                                    */
/*************************************************************************************************/
static char         s_compile_time[12];                                        /* 程序编译的日期时间 */

/**************************************************************************************************
**  函数名称:  FormatCompileDate
**  功能描述:  格式化程序编译的日期，生成便于阅读的格式
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
static BOOLEAN FormatCompileDate(char *date)
{
    s_compile_time[0] = date[7];                                               /* 填入年份 */
    s_compile_time[1] = date[8];
    s_compile_time[2] = date[9];
    s_compile_time[3] = date[10];
    
    s_compile_time[4] = '/';                                                   /* 填入分隔符 */
    
    switch (date[0])
    {
        case 'J':
            if ('a' == date[1]) {                                              /* 一月 */
                s_compile_time[5] = '0';
                s_compile_time[6] = '1';
            } else {
                if ('n' == date[2]) {                                          /* 六月 */
                    s_compile_time[5] = '0';
                    s_compile_time[6] = '6';
                } else {                                                       /* 七月 */
                    s_compile_time[5] = '0';
                    s_compile_time[6] = '7';
                }
            }
            break;
            
        case 'F':                                                              /* 二月 */
            s_compile_time[5] = '0';
            s_compile_time[6] = '2';
            break;
            
        case 'M':
            if ('r' == date[2]) {                                              /* 三月 */
                s_compile_time[5] = '0';
                s_compile_time[6] = '3';
            } else {                                                           /* 五月 */
                s_compile_time[5] = '0';
                s_compile_time[6] = '5';
            }
            break;
            
        case 'A':
            if ('p' == date[1]) {                                              /* 四月 */
                s_compile_time[5] = '0';
                s_compile_time[6] = '4';
            } else {                                                           /* 八月 */
                s_compile_time[5] = '0';
                s_compile_time[6] = '8';
            }
            break;
            
        case 'S':                                                              /* 九月 */
            s_compile_time[5] = '0';
            s_compile_time[6] = '9';
            break;
            
        case 'O':                                                              /* 十月 */
            s_compile_time[5] = '1';
            s_compile_time[6] = '0';
            break;
            
        case 'N':                                                              /* 十一月 */
            s_compile_time[5] = '1';
            s_compile_time[6] = '1';
            break;
            
        case 'D':                                                              /* 十二月 */
            s_compile_time[5] = '1';
            s_compile_time[6] = '2';
            break;
            
        default:
            return FALSE;
    }
    
    s_compile_time[7] = '/';                                                   /* 填入分隔符 */
    
    if (date[4] == ' ') {                                                      /* 填入日期 */
        s_compile_time[8] = '0';
        s_compile_time[9] = date[5];
    } else {
        s_compile_time[8] = date[4];
        s_compile_time[9] = date[5];
    }
    
    return TRUE;
}

/**************************************************************************************************
**  函数名称:  GetSoftVersion
**  功能描述:  获取软件版本号
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
char *GetSoftVersion(void)
{
    return SOFTWARE_VERSION;
}

/**************************************************************************************************
**  函数名称:  GetHardVersion
**  功能描述:  获取硬件版本号
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
char *GetHardVersion(void)
{
    return LINKSTR(HARDWARE_VERSION, USB_VERSION);
}

/**************************************************************************************************
**  函数名称:  GetCompileDate
**  功能描述:  获取程序编译的日期
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
char *GetCompileDate(void)
{
    if (FormatCompileDate(__DATE__) == TRUE) {
        return s_compile_time;
    } else {
        return __DATE__;
    }
}

/**************************************************************************************************
**  函数名称:  GetCompileTime
**  功能描述:  获取程序编译的时间
**  输入参数:  无
**  输出参数:  无
**  返回参数:  无
**************************************************************************************************/
char *GetCompileTime(void)
{
    return __TIME__;
}


